package com.ktjiaoyu.travelaiagent.tools;

import cn.hutool.core.io.FileUtil;
import cn.hutool.http.HttpUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.ai.chat.model.ToolContext;
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.ai.tool.annotation.ToolParam;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.io.File;
import java.util.UUID;

@Component
@Slf4j
public class DownloadTool {
    // 文件根目录
    @Value("${travel.ai.files.root}")
    private String fileRoot;

    /**
     * 下载网络资源文件
     *
     * @param url 网络资源URL
     * @param toolContext 工具上下文，用于获取chatId等信息
     * @return 下载后的文件名
     */
    @Tool(description = "Download a file from the internet.")
    public String download(@ToolParam(description = "The URL of the file to be downloaded.", required = true) String url,
                           // 注入ToolContext可以获取工具上下文参数
                           ToolContext toolContext) {
        // 建议用会话ID隔离文件，避免读取到其他用户的会话文件
        String chatId = (String) toolContext.getContext().get("chatId");
        log.info("AI调用download工具下载'{}'文件，chatId: {}", url, chatId);
        if(chatId == null){
            chatId = "";
        }else{
            chatId = chatId + "/"; // 拼接路径分割
        }
        
        try {
            // 文件扩展名默认用jpg
            String fileExtension = ".jpg";
            // 生成唯一文件名避免重复
            String uniqueFileName = UUID.randomUUID() + fileExtension;
            // 拼接完整路径
            String filePath = this.fileRoot + "/" + chatId + uniqueFileName;
            
            // 创建父目录（如果不存在）
            FileUtil.mkParentDirs(filePath);
            
            // 下载文件
            File destFile = new File(filePath);
            HttpUtil.downloadFile(url, destFile);
            
            log.info("AI调用download工具下载'{}'文件成功，保存路径: {}", url, filePath);
            // 下载成功，返回文件名
            return uniqueFileName;
        }catch (Exception e) {
            e.printStackTrace();
            log.error("AI调用download工具下载'{}'文件出现异常: {}", url, e.getMessage());
            // 下载文件出错，返回错误信息
            return "An error occurred while downloading the file. The error message is: " + e.getMessage();
        }
    }
}